/*************************************************************************
	> File Name: hzoj_248.cpp
	> Author: 
	> Mail: 
	> Created Time: Sat 10 Aug 2024 09:50:25 AM CST
输入	
	对于每组测试用例，第一行输入此组数据元素个数 x,
接下来 x 行，每行一个数，表示元素。（1≤x≤500000）
​当读入的元素个数 x 为零时，程序结束。
输出
​	对于每组测试用例，输出一个数，表示逆序对个数。
 ************************************************************************/

// 归并排序思路

#include<iostream>
using namespace std;
#define MAX_N 500000

int arr[MAX_N + 5], temp[MAX_N + 5];

long long mergeSort(int *arr, int l, int r) {
	if(r - l <= 1) return 0;
	int mid = (r + l) / 2;
	long long a = mergeSort(arr, l, mid);
	long long b = mergeSort(arr, mid, r);
	long long c = 0;
	int p1 = l, p2 = mid, k = 0;
	while (p1 < mid || p2 < r) {
		if(p2 == r || (p1 < mid && arr[p1] <= arr[p2])) {
			temp[k++] = arr[p1++];
		} else {
			temp[k++] = arr[p2++];
			c += (mid - p1);
		}
	}
	for(int i = l; i < r; i++) {
		arr[i] = temp[i - l];
	}
	return a + b + c;
}

void solve(int n) {
	for(int i = 0; i < n; i++) {
		scanf("%d", arr + i);
	}
	printf("%lld\n", mergeSort(arr, 0, n));
}
int main() {
	int n;
	while(true) {
		scanf("%d", &n);
		if(n == 0) break;
		solve(n);
	}
	return 0;
}
